package com.lp.guoguo.service;

import com.github.benmanes.caffeine.cache.Cache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.function.Supplier;

@Service
@Slf4j
public class CacheService {

    // 注入Caffeine缓存
    @Autowired
    private Cache<String, Object> caffeineCache;

    /**
     * 获取缓存，不存在则通过supplier加载
     */
    public Object getOrLoad(String key, Supplier<Object> supplier) {
        return caffeineCache.get(key, k -> {
            Object value = supplier.get();
            log.debug("Cache miss for key: {}", key);
            return value;
        });
    }

    /**
     * 批量删除缓存
     */
    public void batchRemove(List<String> keys) {
        caffeineCache.invalidateAll(keys);
    }

    /**
     * 更新缓存
     */
    public void put(String key, Object value) {
        caffeineCache.put(key, value);
    }

    /**
     * 获取缓存
     */
    public Object get(String key) {
        // 根据key获取缓存中的值
        return caffeineCache.getIfPresent(key);
    }

    /**
     * 删除缓存
     */
    public void remove(String key) {
        // 根据key删除缓存中的值
        caffeineCache.invalidate(key);
    }

    /**
     * 清空缓存
     */
    public void clear() {
        // 清空缓存中的所有值
        caffeineCache.invalidateAll();
    }

    /**
     * 获取缓存统计信息
     */
    public String getStats() {
        // 获取缓存统计信息
        return caffeineCache.stats().toString();
    }
}
